<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>

        //在 ES6 以前，我们无法给一个函数参数设置默认值，只能采用变通写法：
        function add(a, b) {
            // 判断 b 是否为空，为空就给默认值 1
            b = b || 1;
            return a + b;
        }
        // 传一个参数
        console.log(add(10));
        // 现在可以这么写：直接给参数写上默认值，没传就会自动使用默认值
        function add2(a , b = 1) {
            return a + b;
        }
        // 传一个参数
        console.log(add2(10));

        // 不定参数用来表示不确定参数个数，形如，...变量名，由...加上一个具名参数标识符组成。
        // 具名参数只能放在参数列表的最后，并且有且只有一个不定参数
        function fun(...values) {
            console.log(values.length)
        }
        fun(1, 2) //2
        fun(1, 2, 3, 4) //4

        // 以前声明一个方法
        // var print = function (obj) {
        //      console.log(obj);
        // }
        // 可以简写为：
        var print = obj => console.log(obj);
        // 测试调用
        print(100);

        // 两个参数的情况：
        var sum = function (a, b) {
            return a + b;
        }
        // 简写为：
        // 当只有一行语句，并且需要返回结果时，可以省略 {} , 结果会自动返回。
        var sum2 = (a, b) => a + b;
        // 测试调用
        console.log(sum2(10, 10));//20
        // 代码不止一行，可以用`{}`括起来
        var sum3 = (a, b) => {
            c = a + b;
            return c;
        };
        // 测试调用
        console.log(sum3(10, 20));//30

        // 需求，声明一个对象，hello 方法需要对象的个别属性
        // 以前的方式：
        const person = {
            name: "jack",
            age: 21,
            language: ['java', 'js', 'css']
        }
        function hello(person) {
            console.log("hello," + person.name)
        }
        // 现在的方式
        var hello2 = ({ name }) => { console.log("hello," + name) };
        // 测试
        hello2(person);
    </script>
</body>
</html>